<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>ACE Code Lens demo</title>
  <style type="text/css" media="screen">
    body {
        overflow: hidden;
    }

    #editor {
        margin: 0;
        position: absolute;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
    }
  </style>
</head>
<body>

<pre id="editor"></pre>

<!-- load ace -->
<script src="../src/ace.js"></script>
<!-- load ace code_lens extension -->
<script src="../src/ext-code_lens.js"></script>
<script>
    var editor = ace.edit("editor");
    editor.session.setMode("ace/mode/html");

    var commandId = "describeCodeLens";
    editor.commands.addCommand({
        name: commandId,
        exec: function(editor, args) {
            // services available in `ctx`
            alert('CodeLens command called with arguments ' + args);
        }
    });
    editor.commands.addCommand({
        name: "clearCodeLenses",
        exec: function(editor, args) {
            editor.setOption("enableCodeLens", false);
            codeLens.clear(editor.session);
        }
    });
    editor.setOption("enableCodeLens", true);

    codeLens.registerCodeLensProvider(editor, {
        provideCodeLenses: function(session, callback) {
            var p = [{
                start: {row: 0},
                command: {
                    id: "clearCodeLenses",
                    title: "Clear all code lenses",
                    arguments: []
                }
            }];
            var l = session.getLength()

            for (var row = 2; row < l; row ++) {
                var line = session.getLine(row);
                var endColumn = line.length;

                var m = /[{>]\s*$/.exec(line);
                if (!m) continue;

                p.push({
                    start: {
                        row: row,
                        column: m.index,
                    },
                    command: {
                        id: commandId,
                        title: "Line " + (row + 1),
                        arguments: ["line", row]
                    }
                });

                if (m.index < 10) continue;
                p.push({
                    start: {
                        row: row,
                        column: m.index,
                    },
                    end: {
                        row: row,
                        column: m.index + 1,
                    },
                    command: {
                        id: commandId,
                        title: "column " + endColumn,
                        arguments: ["column", endColumn]
                    }
                });

                if (m.index < 30) continue;
                p.push({
                    start: {
                        row: row,
                        column: m.index,
                    },
                    command: {
                        id: commandId,
                        title: "Third Link",
                        arguments: ["3", row]
                    }
                });

            }
            callback(p);
        }
    });

    window.editor = editor;
    window.codeLens = codeLens;
</script>

<script src="./show_own_source.js"></script>
</body>
</html>
